package lv.servidordisqueria.server;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;

import lv.mensajeriadisqueria.mensaje.Mensaje;

public class ServidorConsultor extends Thread {
	
	private final Socket socket;

	public ServidorConsultor(Socket socket){
		this.socket = socket;
		start();
	}
	
	@Override
	public void run() {
		try {
			while (true) {
				Mensaje mensaje = new Mensaje();
				try {
					mensaje = leerMensaje();
				} catch (ClassNotFoundException e) {
					mensaje.setMensaje(Mensaje.EXCEPTION);
					mensaje.setObjeto(e);
				} catch (RuntimeException e) {
					mensaje.setMensaje(Mensaje.EXCEPTION);
					mensaje.setObjeto(e);
				} finally {
					escribirMensaje(mensaje);
				}
			}
		} catch (IOException e) {
			System.out.println(e.getMessage());
			e.printStackTrace();
		} 
	}
	
	public synchronized Mensaje leerMensaje() throws IOException, ClassNotFoundException {
		ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream());
		return Accion.actuar((Mensaje)objectInputStream.readObject());
	}
	
	public synchronized void escribirMensaje(Mensaje mensaje) throws IOException {
		ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
		objectOutputStream.writeObject(mensaje);
	}
}
